#!/bin/sh

pccardctl eject

# Get rid of any currently running dhclients
killall dhclient dhclient3 2>/dev/null

# First do all network interfaces that were brought up by ifupdown. These are
# the only interfaces that we bring up on resume (the other ones are probably
# managed by other tools, such as NetworkManager, and will be brought up
# automatically). Due to logical interfaces, the interfaces that we pass to
# ifdown are DIFFERENT than those that we pass to ifup, see Debian BTS #475002.
IFDOWN_INTERFACES="`cat /var/run/network/ifstate | sed 's/=.*//'`"
IFUP_INTERFACES="`cat /var/run/network/ifstate`"

must_control_interface()
{
  # Always skip lo
  test "$1" = "lo" && return 1
  for i in $SKIP_INTERFACES; do
      # Skip if listed in $SKIP_INTERFACES
      echo "$1" | grep -q "^$i" && return 1
  done
  return 0
}


# Shut down the interfaces (except lo, which can and should be kept up)
for x in $IFDOWN_INTERFACES; do
    if must_control_interface $x ; then
        ifdown $x
    fi
done

# TODO:  Tell NetworkManager to shut down networking at this point

# Find the remaining running network interfaces...
INTERFACES=`/sbin/ifconfig | awk '/^[^ ]+/ {print $1}'`

# And shut them down (except lo, which can and should be kept up)
for x in $INTERFACES; do
    if must_control_interface $x ; then
      ifconfig $x down
    fi
done

